package com.talkyun.utils.json;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JSONObject {

    private com.alibaba.fastjson.JSONObject json;

    JSONObject(com.alibaba.fastjson.JSONObject json) {
        this.json = json;
    }

    public JSONObject put(String key, Object value) {
        json.put(key, value);
        return this;
    }

    public JSONObject put(String key, JSONArray value) {
        if (value != null) {
            json.put(key, value.getRawArray());
        }
        return this;
    }

    protected com.alibaba.fastjson.JSONObject getRawObject() {
        return json;
    }

    public Date getDate(String key) {
        return json.getDate(key);
    }

    public String getString(String key) {
        return json.getString(key);
    }

    public Integer getInteger(String key) {
        return json.getInteger(key);
    }

    public Long getLong(String key) {
        return json.getLong(key);
    }

    public Boolean getBoolean(String key) {
        return json.getBoolean(key);
    }

    public Boolean getBoolean(String key, boolean defaultValue) {
        Object value = json.get(key);
        if (value != null) {
            return (Boolean) value;
        } else {
            return defaultValue;
        }
    }

    public JSONObject getJSONObject(String key) {
        com.alibaba.fastjson.JSONObject json2 = json.getJSONObject(key);
        return json2 == null ? null : new JSONObject(json2);
    }

    public JSONArray getJSONArray(String key) {
        com.alibaba.fastjson.JSONArray jarry = json.getJSONArray(key);
        return jarry == null ? null : new JSONArray(jarry);
    }

    public Object get(String key) {
        return json.get(key);
    }

    public boolean exists(String key) {
        return json.get(key) != null;
    }

    @Override
    public String toString() {
        return json.toJSONString();
    }

    public Map<String, Object> toMap() {
        return new HashMap<String, Object>(json);
    }

    public int size() {
        return json.size();
    }
}
